package co.com.claro.vista.action.usuario;

import co.com.claro.comun.util.util;
import co.com.claro.servicio.od.CatalogoOd;
import co.com.claro.servicio.od.MenuOd;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.log4j.Logger;

import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;
import co.com.claro.comun.fabrica.LanzarFabrica;
import co.com.claro.comun.od.FabricaTo;
import co.com.claro.servicio.negocio.ILoginServicio;
import co.com.claro.servicio.od.DataJson;
import co.com.claro.servicio.od.UsuarioOd;

import javax.naming.directory.Attributes;
import javax.servlet.ServletContext;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;






/**
 * Created by IntelliJ IDEA.
 * User: Manuel Serrano
 * Date: 21/05/2010
 * Time: 11:33:39 AM
 * To change this template use File | Settings | File Templates.
 */


public class LoginAction extends ActionSupport implements ServletContextAware, SessionAware,Serializable {
    private static final Logger logger = Logger.getLogger(LoginAction.class);
    private FabricaTo fabrica;
    private UsuarioOd usuario;
    private ILoginServicio loginServicio;
    private String password;
    private String username;
    private String mensaje;
    private DataJson data=new DataJson();
    private String codigo;
    private String urlform;
    private Map session;
    private List<MenuOd> menus;
    private List<String> mensajes;




    public LoginAction() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, IllegalAccessException, InstantiationException {
        LanzarFabrica.getInstancia(this);
    }



    public String execute() throws Exception {
        final String origen = "loginAction.execute";
        long time;
        UsuarioOd usuario;
        try{

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act")+LoginAction.class+" | "+origen);

            time = System.currentTimeMillis ();

            session.put("intentos_fallidos",0);

            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act")+LoginAction.class+" | "+origen+" | "+time);



        }catch (Exception e){
            logger.error(e);
        }
        return INPUT;
    }


    public String validarUsuario() throws Exception {
        final String origen = "loginAccion.validarUsuario";
        long time;
        List<UsuarioOd> usuarios;
        try{

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act")+LoginAction.class+" | "+origen);

            time = System.currentTimeMillis ();


            usuario=new UsuarioOd();
            usuario.setAfiliado(username);
            usuario.setClave(password);
            usuarios=getLoginServicio().validarUsuario("",usuario);
            if(usuarios!=null){
                session.put("usuario",usuarios.get(0));
                usuario=usuarios.get(0);
                codigo="OK";
            }else{
                codigo="ERROR";
                mensaje="Usuario no existe";
            }

            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act")+LoginAction.class+" | "+origen+" | "+time);



        }catch (Exception e){
            logger.error(e);
        }
        return SUCCESS;
    }


        public String menu() throws Exception {
        final String origen = "loginAccion.menu";
        long time;
        List<UsuarioOd> usuarios;
        try{

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act")+LoginAction.class+" | "+origen);

            time = System.currentTimeMillis ();

            usuario= (UsuarioOd) session.get("usuario");
            menus=getLoginServicio().menu("",usuario);
            codigo="OK";

            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act")+LoginAction.class+" | "+origen+" | "+time);



        }catch (Exception e){
            logger.error(e);
        }
        return SUCCESS;
    }


    public String mensajes() throws Exception {
        final String origen = "loginAccion.mensajes";
        long time;
        List<UsuarioOd> usuarios;
        try{

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act")+LoginAction.class+" | "+origen);

            time = System.currentTimeMillis ();

            usuario= (UsuarioOd) session.get("usuario");
            mensajes=new ArrayList<String>();
            mensajes.add("Flujos por aprobar de Infraestructura");
            mensajes.add("10 Cliente nuevos");
            mensajes.add("Flujos por aprobar de Aplicacion");
            mensajes.add("Flujos por aprobar de Novedades");
            codigo="OK";

            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act")+LoginAction.class+" | "+origen+" | "+time);



        }catch (Exception e){
            logger.error(e);
        }
        return SUCCESS;
    }






    public String logout(){
        final String origen = "LoginAction.login";
        long time;
        UsuarioOd u;
        String retorno="salir";
        try{

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act")+LoginAction.class+" | "+origen);

            time = System.currentTimeMillis ();


            time = System.currentTimeMillis () - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act")+LoginAction.class+" | "+origen+" | "+time);



        }catch (Exception e){
            logger.error(e);
        }
        return retorno;
    }




    public ILoginServicio getLoginServicio() {
        return this.loginServicio;
    }

    public void setLoginServicio(ILoginServicio loginServicio) {
        this.loginServicio = loginServicio;
    }

    public FabricaTo getFabrica() {
        return fabrica;
    }

    public void setFabrica(FabricaTo fabrica) {
        this.fabrica = fabrica;
    }


    public void setServletContext(ServletContext context) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public void setSession(Map<String, Object> session) {
        //To change body of implemented methods use File | Settings | File Templates.
        this.session = session;
    }


    public UsuarioOd getUsuario() {
        return usuario;
    }

    public void setUsuario(UsuarioOd usuario) {
        this.usuario = usuario;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    public DataJson getData() {
        return data;
    }

    public void setData(DataJson data) {
        this.data = data;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getUrlform() {
        return urlform;
    }

    public void setUrlform(String urlform) {
        this.urlform = urlform;
    }

    public List<MenuOd> getMenus() {
        return menus;
    }

    public void setMenus(List<MenuOd> menus) {
        this.menus = menus;
    }

    public List<String> getMensajes() {
        return mensajes;
    }

    public void setMensajes(List<String> mensajes) {
        this.mensajes = mensajes;
    }
}





